<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<link rel="STYLESHEET" href="lib.css" type='text/css' />
<link rel="SHORTCUT ICON" href="../icons/pyfav.png" type="image/png" />
<link rel='start' href='../index.html' title='Python documentation Index' />
<link rel="first" href="lib.html" title='Python library Reference' />
<link rel='contents' href='contents.html' title="Contents" />
<link rel='index' href='genindex.html' title='Index' />
<link rel='last' href='about.html' title='About this document...' />
<link rel='help' href='about.html' title='About this document...' />
<link rel="next" href="node49.html" />
<link rel="prev" href="re-objects.html" />
<link rel="parent" href="module-re.html" />
<link rel="next" href="node49.html" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name='aesop' content='information' />
<title>4.2.5 匹配对象</title>
</head>
<body>
<div class="navigation">
<div id='top-navigation-panel' xml:id='top-navigation-panel'>
<table align="center" width="100%" cellpadding="0" cellspacing="2">
<tr>
<td class='online-navigation'><a rel="prev" title="4.2.4 regular Expression Objects"
  href="re-objects.html"><img src='../icons/previous.png'
  border='0' height='32'  alt='Previous Page' width='32' /></a></td>
<td class='online-navigation'><a rel="parent" title="4.2 re  "
  href="module-re.html"><img src='../icons/up.png'
  border='0' height='32'  alt='Up one Level' width='32' /></a></td>
<td class='online-navigation'><a rel="next" title="4.2.6 Examples"
  href="node49.html"><img src='../icons/next.png'
  border='0' height='32'  alt='Next Page' width='32' /></a></td>
<td align="center" width="100%">Python库参考</td>
<td class='online-navigation'><a rel="contents" title="Table of Contents"
  href="contents.html"><img src='../icons/contents.png'
  border='0' height='32'  alt='Contents' width='32' /></a></td>
<td class='online-navigation'><a href="modindex.html" title="Module Index"><img src='../icons/modules.png'
  border='0' height='32'  alt='Module Index' width='32' /></a></td>
<td class='online-navigation'><a rel="index" title="Index"
  href="genindex.html"><img src='../icons/index.png'
  border='0' height='32'  alt='Index' width='32' /></a></td>
</tr></table>
<div class='online-navigation'>
<b class="navlabel">前一节:</b>
<a class="sectref" rel="prev" href="re-objects.html">4.2.4 正则表达式对象</a>
<b class="navlabel">上一级:</b>
<a class="sectref" rel="parent" href="module-re.html">4.2 re  </a>
<b class="navlabel">下一节:</b>
<a class="sectref" rel="next" href="node49.html">4.2.6 例子</a>
</div>
<hr /></div>
</div>
<!--End of Navigation Panel-->

<h2><a name="SECTION006250000000000000000"></a><a name="match-objects"></a>
<br>
4.2.5 匹配对象</h2>

<p>
匹配对象的实例支持下列方法和属性：<p>
<dl><dt><table cellpadding="0" cellspacing="0"><tr valign="baseline">
  <td><nobr><b><tt id='l2h-425' xml:id='l2h-425' class="method">expand</tt></b>(</nobr></td>
  <td><var>template</var>)</td></tr></table></dt>
<dd>返回通过在模版字符串<var>template</var>上反斜线替代获得的字符串，  通过<tt class="method">sub()</tt>方法完成。
转码，诸如“\n”被转换成相应的字符串，数字反向参考 ("<tt class="samp">\1</tt>", "<tt class="samp">\2</tt>") 和名称反向参考 ("<tt class="samp">\g&lt;1&gt;</tt>", "<tt class="samp">\g&lt;name&gt;</tt>") 通过对应组的内容被替换。
</dl>

<p>
<dl><dt><table cellpadding="0" cellspacing="0"><tr valign="baseline">
  <td><nobr><b><tt id='l2h-426' xml:id='l2h-426' class="method">group</tt></b>(</nobr></td>
  <td><var></var><big>[</big><var>group1, ...</var><big>]</big><var></var>)</td></tr></table></dt>
<dd>
  返回匹配的一个或多个子组。  如果有一个单一的参数，结果是一个单一的字符串； 如果有多个参数， 结果是每个参数一项的元组。
没有参数， <var>group1</var> 缺省为0 (整个匹配被返回)。
如果一个 <var>groupN</var> 参数是0， 对应的返回值是整个匹配字符串； 如果它在包含的范围[1..99]中，这是字符串匹配对应的括号组。  如果组数是负的或比模式中定义的组数要大，一个<tt class="exception">IndexError</tt>异常被挂起。如果一个包含在模式的一部分中的组不匹配，对应的结果为<code>None</code>。  如果一个包含在模式的一部分中的组匹配多次，返回最后的匹配。

<p>如果正则表达式使用<tt class="regexp">(?P&lt;<var>name</var>&gt;...)</tt>语法， <var>groupN</var> 参数也可以是通过它们的组名称标识组的字符串。  在模式中如果一个字符串参数没有被用作一个组名称， 一个 <tt class="exception">IndexError</tt> 异常被挂起。

<p>
一个适度复杂的例子：

<p>
<div class="verbatim"><pre>
m = re.match(r"(?P&lt;int&gt;\d+)\.(\d*)", '3.14')
</pre></div>

<p>
  执行这个匹配后， <code>m.group(1)</code>是 <code>'3'</code>，同样地<code>m.group('int')</code>，和 <code>m.group(2)</code>是<code>'14'</code>。</dl>

<p>
<dl><dt><table cellpadding="0" cellspacing="0"><tr valign="baseline">
  <td><nobr><b><tt id='l2h-427' xml:id='l2h-427' class="method">groups</tt></b>(</nobr></td>
  <td><var></var><big>[</big><var>default</var><big>]</big><var></var>)</td></tr></table></dt>
<dd>
  返回包含匹配的所有子组的一个元组，从1直到无论多少组在这个模式中。 groups使用的<var>default</var> 参数  不包含在匹配中；它缺省为
<code>None</code>。  (不兼容性注解：在最初的Python 1.5版本中，如果该元组是一个元素的长度，替代返回一个字符串。  后来的版本中 (1.5.1往上)， 这种情况下返回一个单独的元组。)
</dl>

<p>
<dl><dt><table cellpadding="0" cellspacing="0"><tr valign="baseline">
  <td><nobr><b><tt id='l2h-428' xml:id='l2h-428' class="method">groupdict</tt></b>(</nobr></td>
  <td><var></var><big>[</big><var>default</var><big>]</big><var></var>)</td></tr></table></dt>
<dd>
  返回包含该匹配所有指定名称的子组的一个字典， 关键字通过子组的名称。  groups 使用的<var>default</var>参数不包含在匹配中；缺省为
<code>None</code>。</dl>

<p>
<dl><dt><table cellpadding="0" cellspacing="0"><tr valign="baseline">
  <td><nobr><b><tt id='l2h-429' xml:id='l2h-429' class="method">start</tt></b>(</nobr></td>
  <td><var></var><big>[</big><var>group</var><big>]</big><var></var>)</td></tr></table></dt>
<dd>
<dt><table cellpadding="0" cellspacing="0"><tr valign="baseline">
  <td><nobr><b><tt id='l2h-430' xml:id='l2h-430' class="method">end</tt></b>(</nobr></td>
  <td><var></var><big>[</big><var>group</var><big>]</big><var></var>)</td></tr></table></dt>
<dd>返回通过<var>group</var>匹配的子串的开头和结尾的索引；<var>group</var> 缺省为0(意思是整个匹配的子串)。如果<var>group</var> 存在但没有提供给匹配返回 -1。对于一个匹配对象<var>m</var>, 和一个组 <var>g</var> 没有提供给匹配，通过组 <var>g</var>匹配的子串 (相当于
<code><var>m</var>.group(<var>g</var>)</code>) 是

<p>
<div class="verbatim"><pre>
m.string[m.start(g):m.end(g)]
</pre></div>

<p>注意如果<var>group</var> 匹配一个null字符串<code>m.start(<var>group</var>)</code>将等于<code>m.end(<var>group</var>)</code>。  例子， <code><var>m</var> =
re.search('b(c?)', 'cba')</code>后， <code><var>m</var>.start(0)</code> 是1，
<code><var>m</var>.end(0)</code> 是 2， <code><var>m</var>.start(1)</code>和<code><var>m</var>.end(1)</code> 都是2，并且 <code><var>m</var>.start(2)</code> 挂起一个<tt class="exception">IndexError</tt>异常。</dl>

<p>
<dl><dt><table cellpadding="0" cellspacing="0"><tr valign="baseline">
  <td><nobr><b><tt id='l2h-431' xml:id='l2h-431' class="method">span</tt></b>(</nobr></td>
  <td><var></var><big>[</big><var>group</var><big>]</big><var></var>)</td></tr></table></dt>
<dd>
对于匹配对象<tt class="class"></tt> <var>m</var>，返回二元组
<code>(<var>m</var>.start(<var>group</var>), <var>m</var>.end(<var>group</var>))</code>。注意如果 <var>group</var> 没有提供给匹配，该二元组是<code>(-1, -1)</code>。再者， <var>group</var> 缺省为0。
</dl>

<p>
<dl><dt><b><tt id='l2h-432' xml:id='l2h-432' class="member">pos</tt></b></dt>
<dd>
被传递给<tt class="class">RegexObject</tt>的<tt class="function">search()</tt> 或 <tt class="function">match()</tt>方法的<var>pos</var>值。它是RE引擎开始查找一个匹配时字符串的索引。
</dl>

<p>
<dl><dt><b><tt id='l2h-433' xml:id='l2h-433' class="member">endpos</tt></b></dt>
<dd>被传递给<tt class="class">RegexObject</tt>的<tt class="function">search()</tt> 或 <tt class="function">match()</tt>方法的<var>endpos</var>值。它是RE引擎不会再往后的字符串索引。
</dl><dl><dt><b><tt id='l2h-434' xml:id='l2h-434' class="member">lastindex</tt></b></dt>
<dd>
  最后匹配捕获的组的整数索引, 或如果根本没有匹配任何组为 <code>None</code>。 例如， 表达式 <tt class="regexp">(a)b</tt>, <tt class="regexp">((a)(b))</tt>, 和 <tt class="regexp">((ab))</tt>如果应用于字符串<code>'ab'</code>将有<code>lastindex == 1</code>，
然而如果应用于同样的字符串，表达式 <tt class="regexp">(a)(b)</tt> 将有<code>lastindex == 2</code>。</dl>

<p>
<dl><dt><b><tt id='l2h-435' xml:id='l2h-435' class="member">lastgroup</tt></b></dt>
<dd>
  最后匹配捕获的组的名称， 或如果组没有名称<code>，</code>  或根本没有匹配的组，为 <code>None</code> 。
</dl>

<p>
<dl><dt><b><tt id='l2h-436' xml:id='l2h-436' class="member">re</tt></b></dt>
<dd>
  正则表达式对象的 <tt class="method">match()</tt>或<tt class="method">search()</tt>方法 产生的<tt class="class">MatchObject</tt> （匹配对象）实例。</dl>

<p>
<dl><dt><b><tt id='l2h-437' xml:id='l2h-437' class="member">string</tt></b></dt>
<dd>
传递给 <tt class="function">match()</tt>或<tt class="function">search()</tt>的字符串</dl>

<p>

<div class="navigation">
<div class='online-navigation'>
<p></p><hr />
<table align="center" width="100%" cellpadding="0" cellspacing="2">
<tr>
<td class='online-navigation'><a rel="prev" title="4.2.4 regular Expression Objects"
  href="re-objects.html"><img src='../icons/previous.png'
  border='0' height='32'  alt='Previous Page' width='32' /></a></td>
<td class='online-navigation'><a rel="parent" title="4.2 re  "
  href="module-re.html"><img src='../icons/up.png'
  border='0' height='32'  alt='Up one Level' width='32' /></a></td>
<td class='online-navigation'><a rel="next" title="4.2.6 Examples"
  href="node49.html"><img src='../icons/next.png'
  border='0' height='32'  alt='Next Page' width='32' /></a></td>
<td align="center" width="100%">Python 库参考</td>
<td class='online-navigation'><a rel="contents" title="Table of Contents"
  href="contents.html"><img src='../icons/contents.png'
  border='0' height='32'  alt='Contents' width='32' /></a></td>
<td class='online-navigation'><a href="modindex.html" title="Module Index"><img src='../icons/modules.png'
  border='0' height='32'  alt='Module Index' width='32' /></a></td>
<td class='online-navigation'><a rel="index" title="Index"
  href="genindex.html"><img src='../icons/index.png'
  border='0' height='32'  alt='Index' width='32' /></a></td>
</tr></table>
<div class='online-navigation'>
<b class="navlabel">前一节:</b>
<a class="sectref" rel="prev" href="re-objects.html">4.2.4 正则表达式对象</a>
<b class="navlabel">上一级:</b>
<a class="sectref" rel="parent" href="module-re.html">4.2 re  </a>
<b class="navlabel">下一节:</b>
<a class="sectref" rel="next" href="node49.html">4.2.6 例子</a>
</div>
</div>
<hr />
<span class="release-info">2.5.1 版， 文档更新在 2007，4，18。翻译：<a href="http://www.zkfarmer.org">zkfarmer</a>。</span></div>
<!--End of Navigation Panel-->
<address>
关于建议修改的信息查阅 <i><a href="about.html">关于这个文档...</a></i> 。
</address>
</body>
</html>
